
The Geom Instance Operator lets you pick any object to
be used as a particle. The most flexible particle shape you can have inside
of thinkingParticles is a piece of instanced geometry. It can be anything
you model, an animated polygonal spaceship that has a complex hierarchy
or a simple chamfered cylinder. This powerful operator even gives you
the ability to create crowds of character studio bipeds
that are animated and react correctly to the space they occupy.
It is important to note that the object instancing happens whenever the
ON input data stream receives a true condition.
ON - (Bool) This input data
stream determines whether the operator is considered 'on' or 'off.' You
can connect other operators to this input channel such as a Bool
Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local
time for the operator when the user wants to override the default system
time.
Particle - (Particle) This input data stream reads in the currently
selected particle group that is to be given a standard shape. The data
stream MUST be connected and will be highlighted yellow
if it is not.
Use Subtree - (Bool) This input data stream is used to override
the Use Sub-tree Also checkbox state within the Geom Instance rollout.
Normalize Type- (Integer) This input data stream takes an integer
value that represents the Type of normalization algorithm the particles
will use for its instances geometry. Valid input values are 0 through
2, where:
Normalize Size - (Size)
This input data stream is used to override the Normalize Size spinner
value within the Geom Instance rollout.
Offset Type - (Integer) This input data stream takes an integer
value that represents the Type of animation offset type the particles
will use for its instance's geometry. Valid input values are 0 through
3, where:
Frame Offset - (Frame) This
input data stream is used to override the Frame Variation spinner value
within the Geom Instance rollout.
Second Per Speed - (Scalar) This input data stream is used to
override the Sec. per Speed spinner value within the Geom Instance rollout.
Rotation Radius - (Scalar) This input data stream is used to override
the Rotation Radius spinner value within the Geom Instance rollout.
Cycle Frames - (Frame) This input data stream is used to override
the Cycle Frames spinner value within the Geom Instance rollout.
Character Axis - (Integer) This input data stream takes an integer
value that represents the primary axis that the character will be oriented
on. Valid input values are 0 through 2, where:
Invert Axis - (Bool) This
input data stream is used to override the Invert checkbox state within
the Geom Instance rollout.
Rotation - (Angle) This input data stream is used to override
the Rotation deg. spinner value within the Geom Instance rollout.
Vertex Color (Color) - this port is used to supply either a vertex
color (Color Channel 0) or you may pipe in the particle ID (Particle)
to feed TP Variation Texture Map with the relevant data needed to handle
unlimited color variations per object!

Example Setup to feed Particle ID into Vertex Channel
ATree State Number - (Integer) sets the current animation state
of the animation as defined in the Animation-Tree.
ATree Master Speed- sets the Master Speed which acts as a global
multiplier for all animation ranges in all Animation State folders.
ATree Master Speed Variation - adds a random variation on top
of the Master Speed value, the bigger this value the
bigger the randomness will be.
ATree One Turn Guaranteed - when set to True (1), the animation
tree is forced to playback the animation state at least for the first
time.
ATree State - (Integer)
outputs the current Animation Tree State number.
ATree State Progress - (Scalar) outputs the current progress of
the Animation State; 0= start of animation and 1= end of animation sequence
ATree Transition - (Integer) outputs the current transition number
(from one State to a new State)
ATree Transition Progress - (Scalar) holds the current Transition
Progress; 0=start of transition animation and 1= end of transition aniamtion
ATree Destination - (Integer) outputs the number of the next Animation
Tree State to be called.

Up/Down - Clicking on this button will move the various instanced
objects up and down within the listbox.
Remove - If you want to remove a selected object from the list,
highlight its name in the listbox and then click on this button.
Pick Object - Press this button to enter the pick object mode.
You may choose any 3ds Max geometry, light or other helper object from
within the viewports, or you can then hit the H-key to select an object
by name.
NOTE: Be aware that you can pick light sources and helpers with
the Pick Object button, however, lights and helpers are not displayed
or used within the scene.
Hide - Press this button to Hide the selected object so that it
is not visible within the viewports outside of the particle system. This
can be a very handy way of hiding the instanced object used within the
system.
Use Subtree Also - Activate this checkbox to instance the object’s
hierarchy as well as the selected object. When active, every object attached
to the selected one will also be instanced with their relative positions
and animation intact. For instance, if you have a butterfly body that
has two animated wings as separate objects that are linked to the body,
by turning this checkbox on and selecting the butterfly body, the animated
wings will automatically be used as well giving you an instant flock of
animated butterflies
finalRender Instance - this works in conjunction with the Master
Dynamic setting, if the finalRender instancing is enabled and this option
is checked as well the created objects will be flagged as instances to
finalRender.
Original Size - By default,
thinkingParticles will use the selected object’s original size when it
instances the geometry. Use this option when you want to preserve the
size of the instanced geometry.
Keep in mind that this size setting might be overridden by other Size Operators or settings that are applied to the particles elsewhere within the system.
Box Normalize - Every object
can be enclosed by a bounding box. Selecting this option encases the instanced
geometry particle in a bounding box and normalizes it to 1.0. In other
words, an object that has a bounding box size of 30 units will be considered
1.0 unit big when Box Normalize is used. However, be careful when you
use this option. thinkingParticles needs to calculate the bounding box
of an object every time it is triggered to get or set a size. With complex
geometry this might take some time.
As an example, suppose you have a spaceship that is 1,000 3ds Max units
in size. If you want to use this object as a particle, you most likely
won't want each object to maintain it's original size. Let's also suppose
that you want to make sure each spaceship particle is 5 3ds Max
units in size instead. Using the Box Normalize option and typing in a
size of 5 in a Size
Operator will force the particle to be 5 units regardless of its real
size.
Normalize Size - When you select this option, you can set the
size you'd like to use for the instanced geometry. Type in the size of
the object (bounding box) you are going to use as a particle. This size
value will be normalized to 1.0.
Type - The Geom Instance
Operator offers three methods of synchronizing particles and the animation
data associated with the instanced geometry.

None - by default, an instanced shape will use no animation offset
and the animation of the instanced geometry runs through regardless of
the birth time of a particle. When None is selected, all particles will
have the identical animation timing. So if you use the example of a butterfly
flapping its wings, all of the instanced butterfly particles will flap
their wings at the same time.
Birth - select this option when you want the animation associated
with the instanced geometry to start when the particle is born. So in
the case of the butterfly flapping its wings, each butterfly particle
will start flapping its wings when it is created by thinkingParticles.
Character Animation - is directly related to the characters and
crowd work, and when you choose this option it makes sure that any animated
character (IK rig or character studio Biped) will behave
correctly when instanced inside of this operator.
Material Time - will use the animation keyframes of the material
as an Offset when a particle is born.
Animation Tree - choose this option to activate the crowd animation
feature of thinkingParticles. When this option is selected the Animation
Tree section of the rollout menu becomes relevant for all character animation
settings
Frame Variation - It would be highly unrealistic if all instanced
particles started with their animation at the exact same moment. A flock
of birds, for example will not show any synchronous wing movement for
all of the birds in the group. To make each animated particle start at
a different time you should increase the Frame Variation value. Higher
Frame Variation values mean more variation in the particle system animation.
Instanced geometry that has no animation assigned to it is generally
quite easy to handle when instanced. However, animated character rigs
with complex IK settings need some special care. In an effort to handle
characters, thinkingParticles makes a distinction between the skeletal
animation assigned to geometry and the mesh animation of an object or
character. In the Character Animation group of controls, all settings
for Character Studio or other character plug-ins can be adjusted.
When using Character Studio, you should set up the Geom Instance settings
as follows:
In the main dialog, Pick the mesh object that is attached to a Biped rig, without enabling the Use SubTree Also checkbox.
Under the Character Animation group of controls, you will pick the Bip01 (or root node object).
Pick Biped - This button
is named Pick Biped because thinkingParticles expects a hierarchical bone
structure as offered by a Biped rig. character studio
offers a ready-to-animate bone structure for bipedal characters. Because
it’s only a matter of a proper IK definition, any other hierarchical bone
structure will also work. By "proper" generally speaking all
you need to do is ensure that you have a root node in the chain, and that
the nodes are linked together.
Hide - Press this button to hide or unhide the selected Biped
rig or IK skeleton (bone structure).
Sec. per Speed - Each character animation (preferably a character
studio animation) uses an internal reference to measure its walking
or movement speed. Change this spinner's value to adjust the speed of
the character animation. When this value is increased to numbers greater
than 1.0, all animation parts of the character will move faster, while
values below 1.0 will cause the character animation to move slower.
Rotation Radius - Animating characters is a tricky business and
when doing crowd control based on particle systems it can become even
more complex. Using particles can be a good idea, however, they are nothing
but points in space and so having characters change direction like particles
is something that needs to be avoided. To get natural, constant movement
to your characters that are instanced using thinkingParitcles, increase
the Rotation Radius value. It will make sure that the character uses a
defined amount of space to turn around or change direction - it won't
change direction in an unrealistic manner. Another good use for this spinner
is using it to control car motion. Think about a truck; the turning radius
of a truck is much bigger than the one of a small sports car and through
the use of this spinner, you can make sure that the two do not behave
the same.
Cycle Frames - Use this spinner to specify the length of a character
animation in frames. This is needed because thinkingParticles will reference
all character animation timing based on this value.
Character Axis - thinkingParticles does not know what kind of
character you are going to model or animate. It might be a fish, butterfly
or a dinosaur. As such, you need to specify what axis is considered up
as it is seen from the character’s point of view so that the character
is aligned properly with the environment.
Invert - Activating this checkbox flips the selected Character
Axis to its opposite value so that the character's alignment will flip
as well.
Rotation deg - Depending on the situation and animation task,
the initial rotation of a character might need to be adjusted. To do so,
change the rotation angle of the character with this spinner. The rotation
of the character will be around the specified Character Axis.
Animation Tree thinkingParticles uses a standard windows explorer like Tree-View control
to handle animation sequences. Animation sequences are stored "within
the mesh" either as point caches or as animated bone systems or any
type of deforming tool 3ds Max offers. It is important to understand that
this Animation-Tree is an exact representation of the animation flow that
will be called by thinkingParticles one after another.
The most powerful feature here, is the animation and transition handling
per particle! Each individual particle carries the information of the
animation cycle and each particle "knows" what animation cycle
it has to finish before it starts with another cycle (the blending animation
between 2 different animations).
Counting of Animation Cycles starts at 0 (zero), so the first Animation
State is State number 0, the second Animation State is State number 1
and so on. The operator has an IDS-ATree State Number that allows you
to switch the animation cycle at will. By changing the ATree State Number
Lets explain the Animation Tree concept of thinkingParticles with a
simple example. Lets say we want to create a crowd system of people sitting
in a stadium. Each character in the stadium should show a natural behavior
independent of his neighbour! So every character must be able to behave
differently.
The first thing we have to do is create ONE object that has ALL possible
animation sequences "in it". The character can be animated with
any standard method found in 3ds Max. However, it is recommended to use
point caches as an animation option because it is very memory efficient
and fast on deforming meshes.
Our stadium character should perform the following sequences:
Frame 0-59 : Sitting or Sitting Down Animation
Frame 60-89: Standing Up Animation
Frame 90-169: Stood Up/ Standing and Cheering Animation
Frame 170-200: Siting Down Sequence Animation
It is important to note that all intermediate sequences (0-59, 60-90)
show a smooth transition in their animation! thinkingParticles just calls
the animation from within the character no animation blending is done,
this would be far too time consuming for thousands of characters! A good
amount of work has to be done by the animator. They need to make sure
there is proper blending between animation cycles!
So our Character has now a total of 200 Frames animation divided in 4 simple
cycles where each cycle starts smoothly and blends into the other. In
the Animation-Tree you will find the full sequence of the character animation
represented like this:

As you can see to the left, Our Range0 is the animation from frame 0-59,
after this has been performed we want to blend into the standing animation
from frame 60-90. All this is done in the animation cycle with the State
Number 0.

Our second animation state (State Number 1) starts with the Stand UP/Cheering
sequence from frame 90-170 and blends into the Sit-Down sequence from
frame 170-200. By using this animation-tree setup, characters can easily
be forced to sit down by changing the Animation State Number of this operator.
Keep in mind that every character will react individually on an animation
state change.
Right-Click onto a Transition Folder will block the transition for direct
execution. A blocked transition will force the Animation-Tree engine to
search for the next possible transition. One good example to use this
option is to allow an animation even though the first State is not "loop-able".
Usually the Animation-Tree expects animation States that perfectly loop,
sometimes it is better or much easier to animate characters or objects
in such a way that there is a rather a pause and a completely new animation
starts from there. However, this all depends on the characters used or
the intended animations that need to be performed.
Add State - when pressed, an Animation State is added to the tree-view.
The Animation State is indicated by folder symbol that is parallel to
the root folder (left hand side).
Add Range - click this button to add an animation range to the
selected Animation State folder. You may select multiple ranges inside
an Animation State folder, the animations will then be chosen on a weighted
manner, the weight for a selected animation to show up is chosen with
the help of the probability parameter.
Remove - when clicked on, the selected entry will be removed from
the tree-view.
Animation Start - sets the first frame of the animation for the
selected Range entry
Animation End - defines the last frame of the animation for the
selected Range entry.
Playback Speed - sets the playback speed of the animation defined
by the Start and End parameters. This is a factor that gets multiplied
with the original animation range. A value of 0.5 would mean the frames
will playback half of their original speed.
Variation - adds some random variation to the Playback Speed parameter
so that each character behaves differently.
Probability - sets the probability of the selected animation range.
Changing this value makes sense if there are more than one Range entries
in the Animation State folder. A value of 1.0 for all ranges will play
back each animation with the same probability. A value of 2 will make
sure that this (the selected ) Range will be played back twice as often.
Interruptible - when checked, the selected Animation State can
be interrupted and the next animation state will start right away. This
will create jumpy animations if the Animation State is not a still animation.
Master Speed - acts as a global multiplier for all animation ranges
in all Animation State folders.
Variation - adds a random variation to the Master Speed value.
One Turn Guaranteed - check this option to force the animation
tree to use the first State Number change that occurred while playing
back an animation state. All further State change requests will be ignored,
this guarantees that a animation cycle is finished before new States are
used as targets.
Animation Tree - used to
set the random seed value for all animation ranges created with this operator.
This is useful to avoid an equal and synchronous looking animation when
multiple operators of that kind are used in a scene.
TP/MultiSub Material - sets the random seed for the thinkingParticles
Mutli/Sub material.